package com.woniuxy.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {
    // 替换默认的 SimpleMessageConverter 为 JSON 转换器
//    @Bean
//    public Jackson2JsonMessageConverter messageConverter() {
//        return new Jackson2JsonMessageConverter();
//    }
    @Bean
    public Jackson2JsonMessageConverter messageConverter() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 1. 支持Java 8时间类型（如LocalDateTime）
        objectMapper.registerModule(new JavaTimeModule());

        // 2. 关键：配置泛型类型信息保留策略
        // 对非final类型（如自定义的ShopOrderItems）启用类型信息
        objectMapper.enableDefaultTyping(
                ObjectMapper.DefaultTyping.NON_FINAL,  // 类型策略：非final类都包含类型信息
                com.fasterxml.jackson.annotation.JsonTypeInfo.As.PROPERTY  // 类型信息以属性形式写入JSON
        );

        return new Jackson2JsonMessageConverter(objectMapper);
    }
    // 秒杀请求队列（可根据业务命名，比如 seckill.order.queue）
    @Bean
    public Queue seckillQueue() {
        // durable: 是否持久化，true 表示重启 MQ 队列还在
        return new Queue("seckill.order.queue", true);
    }
}